package com.jgc.basic;

import org.junit.Test;

import java.util.ArrayList;
import java.util.concurrent.CopyOnWriteArrayList;

public class CopyOnWriteArrayListTest {
    public static CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
   @Test
   /**
    * 并发迭代操作：当需要在多个线程中并发读取和修改列表时，可以使用 CopyOnWriteArrayList。
    * 在迭代期间，即使有其他线程在修改列表，也不会影响当前迭代的进行。
    */
    public void test01(){
        list.add("1");
        list.add("2");
        list.add("3");
        Runnable r = ()->{
            for (String s : list) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
                System.out.println(s);
            }
        };
       Thread t1 = new Thread(r);
       Thread t2 = new Thread(()->{
           list.add("4");
           list.remove("3");
       });
       t1.start();//T1遍历过程中 被T2修改了，依然不影响t1便利
       t2.start();

       try {
           t1.join();
           t2.join();
       } catch (InterruptedException e) {
           throw new RuntimeException(e);
       }
   }
}
